package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.common.GlobalExceptionHandler;
import com.itheima.dao.SetmealDao;
import com.itheima.dto.PageResult;
import com.itheima.dto.QueryPageBean;
import com.itheima.dto.Result;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.Setmeal;
import com.itheima.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Transactional
public class SetmealServiceImpl implements SetmealService {

	@Autowired
	private SetmealDao setmealDao;

	@Override
	public List<Map<String, Object>> findSetmealCount() {
		return setmealDao.findSetmealCount();
	}

	/**
	 * 分页查询每个角色
	 * @param queryPageBean
	 * @return
	 */
	@Override
	public PageResult findPage(QueryPageBean queryPageBean) {
		String queryString = queryPageBean.getQueryString();
		Integer currentPage = queryPageBean.getCurrentPage();
		Integer pageSize = queryPageBean.getPageSize();

		Page<Setmeal> pages = PageHelper.startPage(currentPage, pageSize);
		pages = setmealDao.findSetmeal(queryString);
		return new PageResult(pages.getTotal(),pages.getResult());
	}

	/**
	 * 新增套餐
	 * @param setmeal
	 */
	@Override
	public void add(Setmeal setmeal,Integer[] checkgroupIds) {
		setmealDao.add(setmeal);
		Integer setmealId = setmeal.getId();
		this.setSetmealAndCheckGroup(setmealId,checkgroupIds);
	}

	/**
	 * 用于新增一个套餐的时候,操作中间关系表,建立套餐和项目组关联关系
	 * @param setmealId
	 * @param checkgroupIds
	 */
	public void setSetmealAndCheckGroup(Integer setmealId,Integer[] checkgroupIds){
		if(checkgroupIds != null && checkgroupIds.length > 0){
			for (Integer checkgroupId : checkgroupIds) {
				Map<String,Integer> map = new HashMap<>();
				map.put("setmealId",setmealId);
				map.put("checkgroupId",checkgroupId);
				setmealDao.setSetmealAndCheckGroup(map);
			}
		}
	}


	@Override
	public void imageUpload(MultipartFile file) {
		// 获得文件名
		String originalFilename = file.getOriginalFilename();
	}

	/**
	 * 删除一个套餐,在删除套餐之前要看是否有角色关联了这一个套餐如果有则无法删除,反正可以删除
	 * @param id
	 */
	@Override
	public void delete(Integer id) {
		//查找关联关系(和项目组),如果count数量大于一,代表被关联
		Integer count = setmealDao.findAssociation(id);
		if (count != null && count > 0) {
			new RuntimeException();
		}
		setmealDao.deleteAndOrderAssociation(id);
		setmealDao.deleteById(id);
	}

	/**
	 * 根据id查询套餐
	 * @param id
	 */
	@Override
	public Setmeal getSetmealById(Integer id) {
		Setmeal setmealById = setmealDao.getSetmealById(id);
		return setmealById;
	}

	/**
	 * 根据套餐id查询对应的检查组项id集合
	 * @param id
	 * @return
	 */
	@Override
	public List<Integer> getCheckGroupId(Integer id) {
		List<Integer> checkgroupId = setmealDao.getCheckgroupId(id);
		return checkgroupId;
	}

	/**
	 * 用于编辑套餐,编辑套餐的时候先要清理中间的关系表,然后再重新建立关联关系
	 * @param setmeal
	 * @param checkgroupIds
	 */
	@Override
	public void update(Setmeal setmeal, Integer[] checkgroupIds) {
		Integer id = setmeal.getId();
		//删除和项目组的关联关系
		setmealDao.deleteAndOrderAssociation(id);
		if (checkgroupIds != null && checkgroupIds.length > 0) {
			//用于重新建立套餐和项目组的关联关系
			setSetmealAndCheckGroup(id,checkgroupIds);
		}
		//基本数据的填写
		setmealDao.update(setmeal);
	}



}
